package main

import "reflect"

const (
	test1 = 1 //常量  声明时必须有默认值且不能更改 bool/数值/string
)

const (
	a = iota // 根据扩行内行位置获取值
	b        //在iota上自增
	c
)

// int - interface - Reflect.Value
// 通过反射获取类型及值
func reflect1(b interface{}) {
	rType := reflect.TypeOf(b) //变量的类型
	println(rType, "\n")
	rValue := reflect.ValueOf(b)
	rNum := rValue.Int()
	println(rNum, "\n")
	rKind := rType.Kind() //变量的类别
	println(rKind, "\n")

	//需转换指针为具体值后更改值
	rValue.Elem().SetInt(11)

	//反射类型转回类型
	iv := rValue.Interface()
	i := iv.(int) //编译时不知道类型所以需要类型断言
	println(i)

}

func main() {
	var x int = 10
	reflect1(&x)
}
